import { mount } from 'vue-test-utils'
import linkBtn from 'src/views/button/src/linkBtn.vue'
/**
 * 只测试了基本组件参数
 * 链接的跳转因无法模拟 window、location 暂时无法编写用例
 */
describe('linkBtn', () => {
  it('基础渲染用例: { dom , class }', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(linkBtn, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      }
    })
    expect(vm.contains('el-button')).to.be.equal(true)
    expect(vm.classes().includes('x-linkBtn')).to.be.equal(true)
  })

  it('基本属性用例: { type, to, routeName, isDownload, saveName, isblank, isOutside, isPreview, query, params, status, target, dictNode, power }', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(linkBtn, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      }
    })
    // type
    vm.setData({ type: 'text' })
    expect(vm.vm.type).to.be.equal('text')
    expect(vm.html().includes('type="text"')).to.be.equal(true)
    vm.setData({ type: 'primary' })
    expect(vm.vm.type).to.be.equal('primary')
    expect(vm.html().includes('type="primary"')).to.be.equal(true)
    vm.setData({ type: 'success' })
    expect(vm.vm.type).to.be.equal('success')
    expect(vm.html().includes('type="success"')).to.be.equal(true)
    vm.setData({ type: 'info' })
    expect(vm.vm.type).to.be.equal('info')
    expect(vm.html().includes('type="info"')).to.be.equal(true)
    vm.setData({ type: 'warning' })
    expect(vm.vm.type).to.be.equal('warning')
    expect(vm.html().includes('type="warning"')).to.be.equal(true)
    vm.setData({ type: 'danger' })
    expect(vm.vm.type).to.be.equal('danger')
    expect(vm.html().includes('type="danger"')).to.be.equal(true)

    // to
    vm.setData({ to: '/index' })
    expect(vm.vm.to).to.be.equal('/index')

    // routeName
    vm.setData({ routeName: 'routeTargetHtml' })
    expect(vm.vm.routeName).to.be.equal('routeTargetHtml')

    // isDownload
    vm.setData({ isDownload: true })
    expect(vm.vm.isDownload).to.be.equal(true)
    expect(vm.classes().includes('isDownload')).to.be.equal(true)
    vm.setData({ isDownload: false })
    expect(vm.vm.isDownload).to.be.equal(false)
    expect(vm.classes().includes('isDownload')).to.be.equal(false)

    // saveName
    vm.setData({ saveName: 'name' })
    expect(vm.vm.saveName).to.be.equal('name')

    // isblank
    vm.setData({ isblank: true })
    expect(vm.vm.isblank).to.be.equal(true)
    vm.setData({ isblank: false })
    expect(vm.vm.isblank).to.be.equal(false)

    // isOutside
    vm.setData({ isOutside: true })
    expect(vm.vm.isOutside).to.be.equal(true)
    vm.setData({ isOutside: false })
    expect(vm.vm.isOutside).to.be.equal(false)

    // isPreview
    vm.setData({ isPreview: true })
    expect(vm.vm.isPreview).to.be.equal(true)
    vm.setData({ isPreview: false })
    expect(vm.vm.isPreview).to.be.equal(false)

    // query
    vm.setData({ query: { name: 'li', age: '20' } })
    expect(vm.vm.query.name).to.be.equal('li')
    expect(vm.vm.query.age).to.be.equal('20')

    // params
    vm.setData({ params: { name: 'li', age: '20' } })
    expect(vm.vm.params.name).to.be.equal('li')
    expect(vm.vm.params.age).to.be.equal('20')

    // status
    vm.setData({ status: ['status1', 'status2'] })
    expect(Array.isArray(vm.vm.status)).to.be.equal(true)
    expect(vm.html().includes('status="status1,status2"')).to.be.equal(true)
    vm.setData({ status: 'status' })
    expect(vm.vm.status).to.be.equal('status')
    expect(vm.html().includes('status="status"')).to.be.equal(true)

    // target
    vm.setData({ target: [] })
    expect(Array.isArray(vm.vm.target)).to.be.equal(true)
    vm.setData({ target: 'string' })
    expect(vm.vm.target).to.be.equal('string')
    vm.setData({ target: { key1: '', key2: '' } })
    expect(Object.keys(vm.vm.target).length).to.be.equal(2)

    // status
    vm.setData({ dictNode: 'string' })
    expect(vm.vm.dictNode).to.be.equal('string')
    expect(vm.html().includes('dictnode="string"')).to.be.equal(true)

    // power
    vm.setData({ power: 'string' })
    expect(vm.vm.power).to.be.equal('string')
    expect(vm.html().includes('power="string"')).to.be.equal(true)
  })

  it('点击按钮下载测试用例', async () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(linkBtn, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      }
    })
    vm.setData({
      isDownload: true,
      to: '/download',
      saveName: 'file'
    })
    await vm.trigger('click')
    expect(vm.vm.saveName).to.be.equal('file')
    expect(vm.contains('.download-btn')).to.be.equal(true)
  })

  it('linkBtn 按钮插槽', async () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(linkBtn, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      },
      propsData: {
        push: true
      },
      slots: {
        default: '<span>插槽点击</span>'
      }
    })
    expect(vm.text()).to.be.equal('插槽点击')
  })

  it('linkBtn 携带参数跳转内链', async () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(linkBtn, {
      mocks: {
        $closeTabs: () => {},
        $router: [],
        $plugins: window.$plugins // 挂载全局方法
      },
      propsData: {
        isOutside: false,
        to: '/inside',
        query: {
          name: 'bob'
        }
      }
    })
    await vm.find('.linkBtn-link').trigger('click')
    expect(vm.vm.$router[0].path).to.be.equal('/inside')
    expect(vm.vm.$router[0].query.name).to.be.equal('bob')
  })
})
